<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /* 
          作用:遍历数组--元素和下标--根据原数组的中元素  -》 映射出一个新的数组
                参数函数return 映射规则
            参数：是一个函数callbackFn(回调函数)
                这个参数函数 接收三个参数.--
                `第一个 就是 数组的元素，第二个这个元素对应的下标，第三个，数组本身

                map内部调用了这个参数函数callbackFn  若干次（数组有几个元素，就调用callbackFN几次）

                map内部 写了一个for循环，遍历数组的元素，每遍历一次就调用 参数函数一次

                
                arr.map  = function(callbackFn){
                    for(var i=0;i<arr.length;i++){
                        callbackFn(arr[i],i,arr)
                    }
                }

              map的返回值--映射出来的新数组  

            arr.map(function(v,i,a){
                return 一个映射规则
            })

            希望把一个数组，按照一定的规则转为另一个数组 都可以使用map
        */
        var arr = [9, 8, 7]
        //    forEach 不能中断
        var resArr = arr.map(function (v, i, a) {
            console.log(v, i, a);
            // v 是原数组中元素
            // return 的 新数组中元素
            return v * 100
        })

        // [900, 800, 700]

        var arr2 = [{ name: 'zhangsan', age: 18 }, { name: 'lisi', age: 1 }];
        var resArr2 = arr2.map(function (v, i) {
            return v.name
        })
        console.log(resArr2);//['zhangsan', 'lisi']



        /*
        
            some 
                判断数组中是否有一些元素满足条件
                返回true false 
            arr.some(function(v,i,a){
                return 判断条件
                return v.age >= 18
            })
            如果有一些满足条件 就返回true ，都没有就返回false

            every
                判断数组中是否所有元素都满足条件
                返回true false 
            arr.every(function(v,i,a){
                return 判断条件
                return v.age >= 18
            })
            都满足 就返回true ，反之 返回false
        */

        // 判断是否有一些成年人
        var flag = arr2.some(function (v) {
            return v.age >= 18;
        });
        console.log(flag);

        // 判断是否都成年
        var flag2 = arr2.every(function (v) {
            return v.age >= 18;
        });
        console.log(flag2);


        /*
            arr.filter(function(v,i){
                return 过滤条件
            })
            过滤出满足条件的元素
            返回一个数组，数组存放过滤出来的元素
        
        */
        var arr2 = [
            { name: 'zhangsan', age: 18 },
            { name: 'lisi', age: 1 },
            { name: 'wagnwu', age: 19 }];
        // 找到数组中所有年龄大于等于18的
        var resArr3 = arr2.filter(function (v, i) {
            return v.age >= 18
        });
        console.log(resArr3);
        console.log(arr2);

        // 删除了年龄小于18的 返回值 赋值数组本身
        // arr2 = arr2.filter(function (v, i) {
        //     return v.age >= 18
        // });
        // console.log(arr2);


        /*  找到第一个满足条件的元素
            arr.find(function(v,i){
                return 查找条件
            })
            找不到返回undefined
        
        */
        //    找到第一个满足条件元素--第一个小于18的人
        var obj = arr2.find(function (v) {
            return v.age < 18
        });
        console.log(obj);

        /*
           找到第一个满足条件的元素的下标
            arr.findIndex(function(v,i){
                return 查找条件
            })
            找不到返回-1
        
        */

        var i = arr2.findIndex(function (v) {
            return v.age === 181
        });
        console.log(i);







    </script>

</body>

</html>